home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / UTILS / AMOSPRO1.DMS / in.adf / Install.AMOS / Install.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1993-03-31  |  34.7 KB  |  1,425 lines

  1. ' AMOS Professional Installer
  2. '
  3. ' By Fran�ois Lionet / Intro by Peter Hickman  
  4. '  
  5. ' (c) 1992 Europress Software Ltd. 
  6.  
  7. Set Buffer 32
  8.  
  9. Global QUIT,VER$
  10. Global MXSIZE,AKEY
  11. Global C0,C1,C2,C3
  12. Global NAMEF$,NAMES$,REG$,USER$
  13. Global DB$,AL$
  14. Global QUIT,DRV$,DRV,SYS$,DFONT$,DLIB$,DS$
  15. Global BCOPY,BIFOLDER
  16. Global XLOAD,YLOAD,XSAVE,YSAVE,XINFO,YINFO
  17. Global XSLI,YSLI,SXSLI,SYSLI,MSLI
  18.  
  19. Dim F$(200),SZ(200),DR$(200)
  20. Dim S(10),I(10),ND$(10),NDD$(10),NF(10)
  21. Global F$(),SZ(),NFILE,PATH$,LFILE
  22. Global DR$(),NDIR,ERR,NF()
  23. Global ND$(),PTICON$
  24.  
  25. Close Workbench 
  26. Close Editor 
  27. Set Sprite Buffer 40
  28. LFILE=40 : Set Dir LFILE,""
  29. Request Off 
  30. Break Off 
  31.  
  32. BCOPY=17 : MXSIZE=64*1024
  33. BIFOLDER=18
  34. C0=6 : C1=3 : C2=7
  35.  
  36. ' Names, sizes and number of files of the different discs  
  37. ND$(0)="AMOSPro_System:" : S(0)=459754 : NF(0)=79+17
  38. ND$(1)="AMOSPro_Tutorial:" : S(1)=747509 : NF(1)=68+9
  39. ND$(2)="AMOSPro_Examples:" : S(2)=758962 : NF(2)=97+14
  40. ND$(3)="AMOSPro_Productivity1:" : S(3)=810316 : NF(3)=17+2
  41. ND$(4)="AMOSPro_Productivity2:" : S(4)=698844 : NF(4)=88+18
  42. ND$(5)="AMOSPro_Accessories:" : S(5)=820401 : NF(5)=16+2
  43.  
  44. ' Names of the directories to create 
  45. NDD$(1)="Tutorial"
  46. NDD$(2)="Examples"
  47. NDD$(3)="Productivity1"
  48. NDD$(4)="Productivity2"
  49. NDD$(5)="Accessories"
  50.  
  51. ' Directory created as default 
  52. DDIR$="AMOS_Pro"
  53.  
  54. ' Different keymaps names
  55. NKY=12
  56. Dim KYN$(NKY),KY$(NKY)
  57. Global KY,KY$()
  58. KYN$(0)=" English   " : KY$(0)="gb"
  59. KYN$(1)=" American  " : KY$(1)="usa1"
  60. KYN$(2)=" Fran�ais  " : KY$(2)="f"
  61. KYN$(3)=" Deutsch   " : KY$(3)="d"
  62. KYN$(4)=" Dansk     " : KY$(4)="dk"
  63. KYN$(5)=" Norsk     " : KY$(5)="n"
  64. KYN$(6)=" Svenskt   " : KY$(6)="s"
  65. KYN$(7)=" Suisse    " : KY$(7)="ch1"
  66. KYN$(8)=" Canadien  " : KY$(8)="cdn"
  67. KYN$(9)=" Schweiz   " : KY$(9)="ch2"
  68. KYN$(10)=" Italiana  " : KY$(10)="i"
  69. KYN$(11)=" Espanol   " : KY$(11)="e"
  70. KYN$(12)=" Portugues " : KY$(12)="po"
  71.  
  72. VER$="1.01"
  73.  
  74. ' Machine langage
  75. Global DBANK
  76. DBANK=8
  77.  
  78. ' Memory check 
  79. If Chip Free+Fast Free<256*1024 : _PANIC[0] : End If 
  80.  
  81. ' Welcome animation
  82. _EXPLOSION : E=Param
  83. If E=0
  84.    Trap Load ND$(0)+"APSystem/AMOSPro_Editor_Samples.Abk",5
  85.    Trap Sam Play 3,1
  86.    Wait 100
  87.    Erase All 
  88. End If 
  89.  
  90. ' Data loading 
  91. Trap Reserve As Work BCOPY,MXSIZE
  92. If Errtrap : _PANIC[0] : End If 
  93. Trap Load ND$(0)+"Install_Data/Inst_Asm.Abk",DBANK
  94. If Errtrap : _PANIC[1] : End If 
  95. Trap Load ND$(0)+"Install_Data/Inst_Resource.Abk",16
  96. If Errtrap : _PANIC[1] : End If 
  97. Trap Load ND$(0)+"Install_Data/Inst_Icon.Abk",BIFOLDER
  98. If Errtrap : _PANIC[1] : End If 
  99. Resource Bank 16
  100.  
  101. ' Press a key
  102. If E=0
  103.    Screen Open 0,640,8,2,Hires : Palette 0,0 : Curs Off 
  104.    Screen Display 0,,252,,
  105.    Centre "Press any key."
  106.    Fade 4,0,$FFF
  107.    
  108.    Repeat 
  109.       Multi Wait 
  110.       Exit If Inkey$<>""
  111.    Until Mouse Key
  112.    
  113.    Fade 2 : Wait 16*2
  114.    Trap Screen 6
  115.    Fade 4 : Wait 4*16
  116.    
  117.    _SCREEN_CLOSALL
  118. End If 
  119.  
  120. INIT_SCREEN
  121.  
  122. Screen Clone 1 : Screen Hide 1
  123. Screen 0 : Palette 0,0,0,0,0,0,0,0
  124. Fade 3 To 1
  125. Show On 
  126.  
  127. ' Ask for keyboard langage 
  128. Vdialog$(1,0)=Array(KYN$(0))
  129. Vdialog(1,1)=NKY
  130. R=Dialog Run(1,7)
  131. Screen Close 1
  132. If R<>1 : _ABORTED : End If 
  133. KY=Rdialog(1,1)
  134.  
  135. ' Changes keyboard langage 
  136. R=Dialog Run(1,10)
  137. _GET_DISC[ND$(0),Resource$(91)]
  138. Trap Exec "SetMap "+KY$(KY)
  139. Trap Exec "SetMap "+KY$(KY)
  140.  
  141. ' Proceed with installation
  142. _CHECK_INSTALLATION
  143.  
  144. ' Install Startup-sequence 
  145.  
  146. Do 
  147.    
  148.    Repeat 
  149.       
  150.       _ADAPT_CONFIG : E=Param : Exit If E
  151.       
  152.       Trap Open Out 1,DRV$+"s/Startup-Sequence" : If Errtrap : E=1 : Exit : End If 
  153.       Trap Print #1,"SetMap "+KY$(KY);Chr$(10);
  154.       Trap Print #1,"Run >Nil: AMOSPro";Chr$(10);
  155.       Trap Print #1,"EndCli";Chr$(10); : If Errtrap : E=3 : Exit : End If 
  156.       Close 
  157.       Exit If E=0,2
  158.       
  159.    Until E
  160.    
  161.    ' Gestion des erreurs  
  162.    Close : _BELL
  163.    R=Dialog Box(AL$,2,Resource$(96+E))
  164.    If R=2
  165.       R=Dialog Run(1,2)
  166.       If R=2 : _QUIT : End If 
  167.    End If 
  168.    
  169. Loop 
  170.  
  171.  
  172. ' Registration number
  173. Vdialog$(1,0)=NAMEF$
  174. Vdialog$(1,1)=REG$
  175. R=Dialog Run(1,3)
  176.  
  177.  
  178. ' First installation page
  179. R=Dialog Run(1,4)
  180. For S=0 To 5 : Vdialog(1,4+S)=S(S) : Vdialog(1,10+S)=1 : Next 
  181.  
  182. ' Free space on the system disc
  183.  
  184. Do 
  185.    
  186.    ' File selector
  187.    Do 
  188.       Trap F$=Fsel$("","",Resource$(63),Resource$(64))
  189.       If Errtrap : E=1 : Exit : End If 
  190.       PTH$=Dir$ : D$=Upper$(Dir$)
  191.       If Exist(D$)=0 or(Left$(D$,2)="DF") and(Mid$(D$,4,1)=":")
  192.          R=Dialog Box(AL$,2,Resource$(66))
  193.          If R=2 : _ABORTED : End If 
  194.       Else 
  195.          If(Left$(D$,4)="RAM:") or(Left$(D$,4)="RAD:")
  196.             FRI=Chip Free+Fast Free : Exit 
  197.          Else 
  198.             FRI=Dfree
  199.          End If 
  200.          Exit 
  201.       End If 
  202.    Loop 
  203.    
  204.    D$=Dir$
  205.    For D=1 To Len(D$)
  206.       Exit If Mid$(D$,D,1)=":"
  207.    Next 
  208.    D$=Left$(D$,Min(D,24))
  209.    
  210.    
  211.    ' Choice page
  212.    Do 
  213.       
  214.       Vdialog$(1,0)=Right$(Dir$,56)
  215.       Vdialog$(1,2)=Resource$(108)+Chr$(34)+D$+Chr$(34)
  216.       Vdialog(1,3)=FRI
  217.       
  218.       R=Dialog Run(1,5)
  219.       
  220.       Repeat 
  221.          
  222.          TS=0
  223.          For S=0 To 5
  224.             I(S)=0
  225.          If Vdialog(1,10+S) : Add TS,S(S) : Inc I(S) : End If : Next 
  226.          Ink 7,6 : X=Vdialog(1,0) : Y=Vdialog(1,1)
  227.          Cls 6,X,Y To X+64,Y+8 : Text X-8,Y+6,Str$(TS)
  228.          Repeat 
  229.             Multi Wait 
  230.             R=Dialog(1)
  231.          Until R
  232.          If R=2 : _ABORTED : End If 
  233.          Exit If R=3,2
  234.       Until R=1
  235.       
  236.       If TS>=FRI
  237.          R=Dialog Box(AL$,2,Resource$(65))
  238.          If R=2 : _ABORTED : End If 
  239.       Else If TS=0
  240.          R=Dialog Box(AL$,2,Resource$(113))
  241.          If R=2 : _ABORTED : End If 
  242.       Else 
  243.          
  244.          If I(0) and SYSF=0
  245.             
  246.             ' Free space on the system disc
  247.             Repeat 
  248.                
  249.                SYSF=0
  250.                SYS$="Sys:"
  251.                DFONT$="Fonts:"
  252.                DLIB$="Libs:"
  253.                DS$="S:"
  254.                
  255.                _GET_DISC[ND$(0),Resource$(91)]
  256.                Trap Dir$=DRV$
  257.                
  258.                If Errtrap=0
  259.                   Trap S=Dfree
  260.                   Trap Dir$="Sys:"
  261.                   If Errtrap=0
  262.                      Trap SS=Dfree
  263.                      If S<>SS
  264.                         SYSF=SS
  265.                      Else 
  266.                         Trap F$=Fsel$("","",Resource$(81),Resource$(82))
  267.                         Trap SS=Dfree
  268.                         If Errtrap=0
  269.                            If S<>SS
  270.                               SYSF=SS
  271.                               SYS$=Dir$
  272.                               DFONT$=SYS$+"Fonts/"
  273.                               DLIB$=SYS$+"Libs/"
  274.                               DS$=SYS$+"S/"
  275.                            End If 
  276.                         End If 
  277.                      End If 
  278.                   End If 
  279.                End If 
  280.                
  281.                If SYSF=0
  282.                   _BELL : R=Dialog Box(AL$,2,Resource$(83))
  283.                   If R=2 : _ABORTED : End If 
  284.                End If 
  285.                
  286.             Until SYSF>0
  287.             
  288.             If SYSF<128*1024
  289.                R=Dialog Box(AL$,2,Resource$(79))
  290.                If R=2 : _ABORTED : End If 
  291.             End If 
  292.             
  293.          End If 
  294.          Exit 2
  295.          
  296.       End If 
  297.       
  298.    Loop 
  299.    
  300. Loop 
  301.  
  302.  
  303. ' Main directory 
  304. _MKDIR[PTH$+DDIR$,1] : E=Param
  305. If E
  306.    R=Dialog Box(AL$,2,Resource$(73))
  307.    If R=2 : _ABORTED : End If 
  308. End If 
  309. PTH$=PTH$+DDIR$+"/"
  310. PTICON$=PTH$+"AMOSPro"
  311.  
  312. ' Different directories
  313. For D=0 To 5
  314.    If I(D)
  315.       Repeat 
  316.          _GET_DISC[ND$(D),Resource$(91+D)]
  317.          If D
  318.             _COPY_DISC[Resource$(91+D),DRV$,PTH$,NDD$(D),S(D),NF(D)]
  319.          Else 
  320.             _COPY_DISC[Resource$(91),DRV$,PTH$,"",S(D),NF(D)]
  321.          End If 
  322.          E=Param
  323.          If E<0 : _ABORTED : End If 
  324.          If E=1
  325.             R=Dialog Box(AL$,2,Resource$(68))
  326.             If R=2 : _ABORTED : End If 
  327.          End If 
  328.          If E=2
  329.             R=Dialog Box(AL$,2,Resource$(73))
  330.             If R=2 : _ABORTED : End If 
  331.          End If 
  332.       Until E=0
  333.    End If 
  334. Next 
  335.  
  336. ' Last installation page 
  337. Vdialog$(1,0)=Right$(PTH$,70)
  338. R=Dialog Run(1,6)
  339.  
  340.  
  341. ' Check any disc in drive
  342. Repeat 
  343.    F=0
  344.    For D=0 To 2
  345.       D$="Df"+Chr$(48+D)+":"
  346.       If Exist(D$)
  347.          R=Dialog Box(AL$,1,Resource$(62)+D$)
  348.          Inc F
  349.       End If 
  350.    Next 
  351. Until F=0
  352.  
  353. _QUIT
  354.  
  355. Procedure _ADAPT_CONFIG
  356.  
  357.    HIMEM=(Chip Free+Fast Free)>768*1024
  358.  
  359.    '>>> Changes in Interpreter_Config     
  360.  
  361.    Trap Open In 1,DRV$+"s/AMOSPro_Interpreter_Config"
  362.    If Errtrap : Pop Proc[2] : End If 
  363.    L=Lof(1)
  364.    Trap Sload 1 To Start(BCOPY),L
  365.    If Errtrap : Pop Proc[2] : End If 
  366.    Close 
  367.    A=Start(BCOPY)+8
  368.  
  369.    ' Auto-close workbench?
  370.    Poke A+36,1 : Poke A+37,1 : If HIMEM : Poke A+36,0 : Poke A+37,0 : End If 
  371.    ' Kill-editor effective? 
  372.    Poke A+39,1 : If HIMEM : Poke A+39,0 : End If 
  373.  
  374.    Trap Bsave DRV$+"s/AMOSPro_Interpreter_Config",Start(BCOPY) To Start(BCOPY)+L
  375.    If Errtrap : Pop Proc[1] : End If 
  376.  
  377.  
  378.    '>>> Changes in Editor_Config    
  379.  
  380.    Trap Open In 1,DRV$+"APSystem/AMOSPro_Editor_Config"
  381.    If Errtrap : Pop Proc[2] : End If 
  382.    L=Lof(1)
  383.    Trap Sload 1 To Start(BCOPY),L
  384.    If Errtrap : Pop Proc[2] : End If 
  385.    Close 
  386.    A=Start(BCOPY)+4
  387.  
  388.    ' NTSC 
  389.    Doke A+2,256 : If Ntsc : Doke A+2,200 : End If 
  390.    
  391.    ' UNDO Length
  392.    Loke A+14,1024*4 : Loke A+18,100
  393.    If HIMEM
  394.       Loke A+14,1024*32 : Loke A+18,500
  395.    End If 
  396.  
  397.    ' Programs hidden or not 
  398.    For P=A+434 To A+434+9*3 Step 3
  399.       If Peek(P) : Poke P,%10 : End If 
  400.    Next 
  401.    If HIMEM
  402.       For P=A+434 To A+434+9*3 Step 3
  403.          If Peek(P) : Poke P,%1 : End If 
  404.       Next 
  405.    End If 
  406.  
  407.    Trap Bsave DRV$+"APSystem/AMOSPro_Editor_Config",Start(BCOPY) To Start(BCOPY)+L
  408.    If Errtrap : Pop Proc[1] : End If 
  409.  
  410. End Proc[0]
  411.  
  412. Procedure _COPY_DISC[N$,SRCE$,DEST$,FOLD$,SIZE,NUM]
  413.    
  414.    VACT$="1"
  415.    
  416.    Vdialog$(1,0)=N$
  417.    R=Dialog Run(1,9)
  418.    XINFO=2 : YINFO=Vdialog(1,4)/8+2
  419.    XLOAD=XINFO : YLOAD=YINFO+2
  420.    XSAVE=XINFO : YSAVE=YLOAD+1
  421.    XSLI=Vdialog(1,0)+2 : YSLI=Vdialog(1,1)+1
  422.    SXSLI=Vdialog(1,2)-5 : SYSLI=Vdialog(1,3)-3
  423.    Paper C0
  424.    
  425.    _GET_ALL[SRCE$,NUM] : If Param : Pop Proc[Param] : End If 
  426.    
  427.    Pen C2 : Print At(XINFO,YINFO)+Resource$(112)+Resource$(111)
  428.    
  429.    _MKDIR[DEST$+FOLD$,1] : If Param : Pop Proc[Param] : End If 
  430.    If FOLD$<>"" : FOLD$=FOLD$+"/" : End If 
  431.    
  432.    _INIT_SLIDER[NFILE,C0,4]
  433.    
  434.    For N=0 To NDIR-1
  435.       
  436.       If Dialog(1) : Pop Proc[-1] : End If 
  437.       
  438.       N$=DR$(N) : Gosub _FILTER
  439.       If F
  440.          If Instr(N$,"/")
  441.             For C=Len(N$) To 1 Step -1
  442.                Exit If Mid$(N$,C,1)="/"
  443.             Next 
  444.             P$=Left$(N$,C-1)
  445.             _MKDIR[P$,0] : If Param : Pop Proc[Param] : End If 
  446.          End If 
  447.       End If 
  448.       
  449.    Next 
  450.    
  451.    For NF=0 To NFILE-1
  452.       
  453.       If Dialog(1) : Pop Proc[-1] : End If 
  454.       
  455.       LF=SZ(NF) : N$=F$(NF) : Gosub _FILTER
  456.       
  457.       If F
  458.          _COPY_FILE[SRCE$+F$(NF),N$,SZ(NF)]
  459.          If Param : Pop Proc[Param] : End If 
  460.       End If 
  461.       
  462.       _SLIDER[NF]
  463.       
  464.    Next 
  465.    _SLIDER[MSLI]
  466.    Pop Proc[0]
  467.    
  468.    _FILTER:
  469.    X=Free : F=0 : Restore DTS
  470.    Do 
  471.       
  472.       Read S1$,S2$,S3$,S4$ : Exit If S1$=""
  473.       
  474.       U$=Upper$(N$)
  475.       A$=Left$(S1$,1) : B$=Left$(S2$,1)
  476.       S1$=Mid$(S1$,2) : S2$=Mid$(S2$,2)
  477.       
  478.       FF=0
  479.       If A$="<" : If Left$(U$,Len(S1$))=S1$ : FF=-1 : End If : End If 
  480.       If A$=">" : If Right$(U$,Len(S1$))=S1$ : FF=-1 : End If : End If 
  481.       If A$=" " : If U$=S1$ : FF=-1 : End If : End If 
  482.       If A$="*" : FF=-1 : End If 
  483.       
  484.       If FF
  485.          FF=0
  486.          If B$="<" : If VACT$<S2$ : FF=-1 : End If : End If 
  487.          If B$=">" : If VACT$>S2$ : FF=-1 : End If : End If 
  488.          If FF
  489.             N$=Mid$(N$,Len(S3$)+1)
  490.             N$=S4$+N$ : F=-1
  491.          End If 
  492.          Exit 
  493.       End If 
  494.    Loop 
  495.    Return 
  496.    
  497.    DTS:
  498.    Data ">AMOSPRO_INTERPRETER_CONFIG",">0","S/",DS$
  499.    Data ">AMOS.LIBRARY",">0","LIBS/",DLIB$
  500.    Data ">INSTALL.AMOS",">9","",""
  501.    Data ">INSTALL.AMOS.INFO",">9","",""
  502.    Data "<INSTALL_DATA",">9","",""
  503.    Data " .INFO",">9","",""
  504.    Data " DISK.INFO",">9","",""
  505.    Data "<C/",">9","",""
  506.    Data "<S/",">9","",""
  507.    Data "<LIBS/",">9","",""
  508.    Data "<L/",">9","",""
  509.    Data "<DEVS/",">9","",""
  510.    Data "<FONTS/",">0","FONTS/",DFONT$
  511.    Data "*",">0","",DEST$+FOLD$
  512.    Data "","","",""
  513.    
  514. End Proc
  515. Procedure _COPY_FILE[S$,D$,LF]
  516.    
  517.    Trap Open In 1,S$ : If Errtrap : Pop Proc[1] : End If 
  518.    Trap Open Out 2,D$ : If Errtrap : Pop Proc[2] : End If 
  519.    
  520.    If LF=0 : LF=Lof(1) : End If 
  521.    
  522.    Pen C1
  523.    
  524.    Repeat 
  525.       
  526.       Print At(XLOAD,YLOAD);Resource$(49)+Right$(S$,60)
  527.       L=Min(LF,Length(BCOPY))
  528.       Trap Sload 1 To Start(BCOPY),L : If Errtrap : Pop Proc[1] : End If 
  529.       Print At(XLOAD,YLOAD);Space$(78-XLOAD)
  530.       
  531.       ' If icon, changes the path to AMOSPro 
  532.       If Right$(S$,5)=".info"
  533.          Loke Start(BCOPY)+$3A,$80000000
  534.          Loke Start(BCOPY)+$3E,$80000000
  535.          'A$=Upper$(S$) 
  536.          'If(Right$(A$,10)=".AMOS.INFO") or(Right$(A$,13)="DEF_ICON.INFO")
  537.          '   H=Hunt(Start(BCOPY) To Start(BCOPY)+LF,":AMOS")
  538.          '   If H 
  539.          '      OL=Peek(H-1) : N$=PTICON$+Chr$(0) : L=Len(N$) 
  540.          '      Poke H-1,L : Poke$ H,N$ 
  541.          '      LF=LF-OL+L : L=LF 
  542.          '   End If 
  543.          'End If  
  544.       End If 
  545.       
  546.       Print At(XSAVE,YSAVE);Resource$(50)+Right$(D$,66)
  547.       Trap Ssave 2,Start(BCOPY) To Start(BCOPY)+L : If Errtrap : Pop Proc[2] : End If 
  548.       Wait 5 : Print At(XSAVE,YSAVE);Space$(78-XSAVE)
  549.       
  550.       LF=LF-L
  551.       
  552.    Until LF<=0
  553.    Close 
  554.    Pop Proc[0]
  555.    
  556. End Proc
  557. Procedure _GET_ALL[F$,N]
  558.  
  559.    _INIT_SLIDER[N,C0,4]
  560.    
  561.    Pen C2 : Print At(XINFO,YINFO)+Resource$(112)+Resource$(110)
  562.    
  563.    For N=0 To NFILE : F$(NFILE)="" : Next 
  564.    For N=0 To NDIR : DR$(NFILE)="" : Next 
  565.    PATH$=F$ : NDIR=0 : NFILE=0 : ERR=0 : _GET_FILES[F$]
  566.    Print At(XINFO,YINFO)+Space$(78-XINFO)
  567.    If ERR=0 : _SLIDER[MSLI] : End If 
  568.    
  569. End Proc[ERR]
  570. Procedure _GET_FILES[F$]
  571.    
  572.    Dim D$(50)
  573.    
  574.    On Error Proc DERR
  575.    Resume Label EERR
  576.    
  577.    If ERR=0
  578.       
  579.       A$=Dir First$(F$+"**")
  580.       While A$<>""
  581.          
  582.          If Dialog(1) : ERR=-1 : End If 
  583.          
  584.          If Left$(A$,1)="*"
  585.             D$(NDOS)=(Mid$(A$,2,LFILE)-" ")+"/"
  586.             DR$(NDIR)=(F$+D$(NDOS))-PATH$
  587.             Inc NDOS : Inc NDIR
  588.          Else 
  589.             SZ(NFILE)=Val(Mid$(A$,LFILE))
  590.             F$(NFILE)=(F$+Left$(A$,LFILE)-" ")-PATH$
  591.             Inc NFILE
  592.          End If 
  593.          _SLIDER[NFILE+NDIR]
  594.          
  595.          A$=Dir Next$
  596.          
  597.       Wend 
  598.       
  599.       If NDOS
  600.          For N=0 To NDOS-1
  601.             _GET_FILES[F$+D$(N)]
  602.          Next 
  603.       End If 
  604.       
  605.    End If 
  606.    
  607.    EERR:
  608. End Proc
  609. Procedure DERR
  610.    ERR=1 : NFILE=0 : NDIR=0 : Resume Label 
  611. End Proc
  612. Procedure _MKDIR[D$,I]
  613.    If Exist(D$)=0
  614.       Trap Mkdir D$
  615.       If Errtrap : Pop Proc[2] : End If 
  616.       If I
  617.          Loke Start(BIFOLDER)+$3A,$80000000
  618.          Loke Start(BIFOLDER)+$3E,$80000000
  619.          Trap Bsave D$+".info",Start(BIFOLDER) To Start(BIFOLDER)+Length(BIFOLDER)
  620.          If Errtrap : Pop Proc[2] : End If 
  621.       End If 
  622.    End If 
  623. End Proc[0]
  624. Procedure _INIT_SLIDER[M,A,B]
  625.    Set Slider A,A,A,0,B,B,B,0
  626.    MSLI=M : _SLIDER[0]
  627. End Proc
  628. Procedure _SLIDER[P]
  629.    P=Min(P,MSLI)
  630.    Hslider XSLI,YSLI To XSLI+SXSLI,YSLI+SYSLI,MSLI,0,P
  631. End Proc
  632. Procedure INIT_SCREEN
  633.    
  634.    Restore DBL
  635.    Repeat 
  636.       Read A$ : DB$=DB$+A$
  637.    Until A$=""
  638.    Restore ALT
  639.    Repeat 
  640.       Read A$ : AL$=AL$+A$
  641.    Until A$=""
  642.    
  643.    Resource Bank 16
  644.    Resource Screen Open 0,640,200,0
  645.    Curs Off : Flash Off : Cls 0
  646.    Wait Vbl 
  647.    Limit Mouse X Hard(0),Y Hard(0) To X Hard(Screen Width),Y Hard(Screen Height)
  648.    
  649.    On Error Goto ERR
  650.    Paper 0 : Pen 1
  651.    Dialog Open 1,DB$,48 : DB$=""
  652.    Pop Proc
  653.    
  654.    ERR: Print Mid$(DB$,Edialog,240) : Wait Key : End 
  655.    
  656.    ' MAIN DIALOG SCREENS
  657.    DBL: Data " "
  658.    
  659.    ' Enter your name page 
  660.    Data "LA 1:"
  661.    Data "BAse 0,0; SIze SW,SH;"
  662.    Data "BOx 0,0,1,SX,SY;"
  663.    Data "LIne 0,4,10,SX;"
  664.    Data "POut 1MECX,YB1+,1ME,0,7;"
  665.    Data "LIne 0,YB1+,10,SX;"
  666.    Data "PP 2,64; PP 3,YB4+;"
  667.    Data "LI 32,YB24+,17,608; PR 48,YA4+,4ME,3; ED 4,XB16+,YA,32,32,0,0,7;"
  668.    Data "LI 32,YB8+,17,608; PR 48,YA4+,5ME,3; ED 5,XB16+,YA,32,32,0,0,7;"
  669.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 6MECXBP+,1,6ME,7;][BR0;BQ;]"
  670.    Data "KY 13,0;"
  671.    Data "RUn 0,3; EXit;"
  672.    
  673.    
  674.    ' Problem with registration  
  675.    Data "LA 2:"
  676.    Data "BAse 0,0; SIze SW,SH;"
  677.    Data "BOx 0,0,1,SX,SY;"
  678.    Data "LIne 0,4,10,SX;"
  679.    Data "POut 1MECX,YB1+,1ME,0,7;"
  680.    Data "LIne 0,YB1+,10,SX;"
  681.    Data "PP 7,40; PP 8,YB1+; PP 9,YB1+; PP 10,YB1+;"
  682.    Data "PR 152,YB16+,11ME,7;"
  683.    Data "PR XA,YB1+,12ME,7;"
  684.    Data "PR XA,YB1+,13ME,7;"
  685.    Data "PR XA,YB1+,14ME,7;"
  686.    Data "PR XA,YB1+,15ME,7;"
  687.    Data "PR XA,YB1+,16ME,7;"
  688.    Data "PR XA,YB1+,17ME,7;"
  689.    Data "PR XA,YB1+,18ME,7;"
  690.    Data "PR XA,YB1+,19ME,7;"
  691.    
  692.    Data "BU 1,16,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 20MECXBP+,1,20ME,7;][BR0;BQ;]"
  693.    Data "KY 13,0;"
  694.    Data "BU 2,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 21MECXBP+,1,21ME,7;][BR0;BQ;]"
  695.    Data "KY 27,0;"
  696.    Data "RUn 0,3; EXit;"
  697.    
  698.    
  699.    ' Registration number  
  700.    Data "LA 3:"
  701.    Data "BAse 0,0; SIze SW,SH;"
  702.    Data "BOx 0,0,1,SX,SY;"
  703.    Data "LIne 0,4,10,SX;"
  704.    Data "POut 1MECX,YB1+,1ME,0,7;"
  705.    Data "LIne 0,YB1+,10,SX;"
  706.    Data "BOx 8,YB8+,1,632,YB32+;"
  707.    Data "SVar 0,22ME 1VA!; POut 0VACX,YA8+,0VA,2,3;"
  708.    
  709.    Data "PP 23,YB24+; PP 24,YB1+; PP 25,YB1+;"
  710.    Data "PP 26,YB8+; PP 27,YB1+;"
  711.    Data "PP 28,YB8+; PP 29,YB1+;"
  712.    
  713.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 30MECXBP+,1,30ME,7;][BR0;BQ;]"
  714.    Data "KY 13,0;"
  715.    Data "RUn 0,3; EXit;"
  716.    
  717.    
  718.    ' Installation   
  719.    ' ~~~~~~~~~~~~ 
  720.    Data "LA 4:"
  721.    Data "BAse 0,0; SIze SW,SH;"
  722.    Data "BOx 0,0,1,SX,SY;"
  723.    Data "LIne 0,4,10,SX;"
  724.    Data "POut 31MECX,YB1+,31ME,0,7;"
  725.    Data "LIne 0,YB1+,10,SX;"
  726.    Data "PP 32,YB24+;"
  727.    Data "PP 33,YB16+; PP 34,YB1+;"
  728.    Data "PP 35,YB8+; PP 36,YB1+;"
  729.    Data "POut 37MECX,YB24+,37ME,0,7;"
  730.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 6MECXBP+,1,6ME,7;][BR0;BQ;]"
  731.    Data "KY 13,0;"
  732.    Data "RUn 0,3; EXit;"
  733.    
  734.    
  735.    ' Installation selection 
  736.    Data "LA 5:"
  737.    Data "BAse 0,0; SIze SW,SH;"
  738.    Data "BOx 0,0,1,SX,SY;"
  739.    Data "LIne 0,4,10,SX;"
  740.    Data "POut 38MECX,YB1+,38ME,0,7;"
  741.    Data "LIne 0,YB1+,10,SX;"
  742.    Data "BOx 8,YB4+,1,632,YB24+;"
  743.    Data "SV 0,109ME 0VA!; POut 0VACX,YA6+,0VA,2,3;"
  744.    Data "PP 39,YB12+;"
  745.    Data "BI 4,124,YB4+,40;"
  746.    Data "BI 5,XA,YB,41;"
  747.    Data "BI 6,XA,YB,42;"
  748.    Data "BI 7,XA,YB,43;"
  749.    Data "BI 8,XA,YB,44;"
  750.    Data "BI 9,XA,YB,45;"
  751.    Data "PR XA,YB,'--------------------------------------------------',3;"
  752.    Data "PR XA,YB,46ME,7; SV 1,YA; PR 0VA72+,1VA,106ME,7;"
  753.    Data "PR 124,YB2+,2VA,7; PR 0VA,YA,3VA#,7; PR 0VA72+,YA,106ME,7;"
  754.    Data "PR 124,YB,'--------------------------------------------------',3;"
  755.    Data "BU 1,16,SY16-,96,12,0,0,1;[LI 0,0,20BP3*+,SX;PR 47MECXBP+,1,47ME,7;][BR0;]"
  756.    Data "KY 13,0;"
  757.    Data "BU 2,SX112-,SY16-,96,12,0,0,1;[LI 0,0,20BP3*+,SX;PR 21MECXBP+,1,21ME,7;][BR0;]"
  758.    Data "KY 27,0;"
  759.    Data "BU 3,SX2/128-,SY16-,256,12,0,0,1;[LI 0,0,20BP3*+,SX;PR 107MECXBP+,1,107ME,7;][BR0;]"
  760.    Data "EXit;"
  761.    
  762.    
  763.    ' Installation complete
  764.    Data "LA 6:"
  765.    Data "BAse 0,0; SIze SW,SH;"
  766.    Data "BOx 0,0,1,SX,SY;"
  767.    Data "LIne 0,4,10,SX;"
  768.    Data "POut 54MECX,YB1+,54ME,0,7;"
  769.    Data "LIne 0,YB1+,10,SX;"
  770.    Data "PP 55,YB16+;"
  771.    Data "PP 56,YB8+; PP 57,YB1+;"
  772.    Data "BOx 8,YB8+,1,632,YB32+;"
  773.    Data "POut 0VACX,YA8+,0VA,0,3;"
  774.    Data "PP 58,YB24+; PP 59,YB1+; PP 60,YB1+;"
  775.    Data "PP 61,YB8+;"
  776.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 48MECXBP+,1,48ME,7;][BR0;BQ;]"
  777.    Data "KY 13,0;"
  778.    Data "RUn 0,3; EXit;"
  779.    
  780.    
  781.    ' Keyboard langage 
  782.    Data "LA 7:"
  783.    Data "BAse 0,0; SIze SW,SH;"
  784.    Data "BOx 0,0,1,SX,SY;"
  785.    Data "LIne 0,4,10,SX;"
  786.    Data "POut 38MECX,YB1+,38ME,0,7;"
  787.    Data "LIne 0,YB1+,10,SX;"
  788.    Data "SV 2,120;"
  789.    Data "BOx 232,2VA 1VA4*- 4-,1,408,2VA 1VA4* + 4+;"
  790.    Data "AList 1,XA8+,YA4+,20,1VA,0VA,0,0,0,3;[BQ;]"
  791.    Data "PP 90,YA20-;"
  792.    Data "BU 2,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 21MECXBP+,1,21ME,7;][BR0;BQ;]"
  793.    Data "KY 27,0;"
  794.    Data "RUn 0,3; EXit;"
  795.    
  796.    
  797.    ' Aborted  
  798.    Data "LA 8:"
  799.    Data "BAse 0,0; SIze SW,SH;"
  800.    Data "BOx 0,0,1,SX,SY;"
  801.    Data "LIne 0,4,10,SX;"
  802.    Data "POut 101MECX,YB1+,101ME,0,7;"
  803.    Data "LIne 0,YB1+,10,SX;"
  804.    Data "PP 102,40; PP 103,YB1+; PP 104,YB8+;"
  805.    Data "PR 152,YB16+,11ME,7;"
  806.    Data "PR XA,YB1+,12ME,7;"
  807.    Data "PR XA,YB1+,13ME,7;"
  808.    Data "PR XA,YB1+,14ME,7;"
  809.    Data "PR XA,YB1+,15ME,7;"
  810.    Data "PR XA,YB1+,16ME,7;"
  811.    Data "PR XA,YB1+,17ME,7;"
  812.    Data "PR XA,YB1+,18ME,7;"
  813.    Data "PR XA,YB1+,19ME,7;"
  814.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 21MECXBP+,1,21ME,7;][BR0;BQ;]"
  815.    Data "KY 27,0;"
  816.    Data "RUn 0,3; EXit;"
  817.    
  818.    ' Installing AMOSPRO!  
  819.    Data "LA 9:"
  820.    Data "BAse 0,0; SIze SW,SH;"
  821.    Data "BOx 0,0,1,SX,SY;"
  822.    Data "LIne 0,4,10,SX;"
  823.    Data "SV 0,72ME 0VA !; POut 0VACX,YB1+,0VA,0,7;"
  824.    Data "LIne 0,YB1+,10,SX;"
  825.    Data "SV4,48; BOx 8,48,1,SX8-,112;"
  826.    Data "SV0,8;SV1,132;SV2,SX16-;SV3,24;BOx 0VA,1VA,1,0VA2VA+,1VA3VA+;"
  827.    Data "PR XB40-,1VA9-,'100 %',3; PR 0VA,1VA9-,'0 %',3;"
  828.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 21MECXBP+,1,21ME,7;][BR0;BQ;]"
  829.    Data "KY 27,0;"
  830.    Data "EXit;"
  831.    
  832.    ' Installation   
  833.    Data "LA 10:"
  834.    Data "BAse 0,0; SIze SW,SH;"
  835.    Data "BOx 0,0,1,SX,SY;"
  836.    Data "LIne 0,4,10,SX;"
  837.    Data "POut 31MECX,YB1+,31ME,0,7;"
  838.    Data "LIne 0,YB1+,10,SX;"
  839.    Data "BO 8,YB40+,1,632,YB104+;"
  840.    Data "POut 80MECX,YA28+,80ME,2,3;"
  841.    Data "EXit;"
  842.    
  843.    ' User instructions... 
  844.    Data "UI PP,2;"
  845.    Data "[PR P1MECX,P2,P1ME,3;]"
  846.    
  847.    Data "UI BI,4;["
  848.    Data "PR P2 32+,P3 2+,P4ME,3; SV 0,P2 272+; PR 0VA,YA,P1VA#,3; PR XA72+,YA,76ME,3;"
  849.    Data "BU P1,P2,P3,24,12,6P1+VA,0,1;[UN 0,0,15BP+;][SV ZN 6+,BP;]"
  850.    Data "XY P2,P3,P2,P3 12+;]"
  851.    
  852.    Data "UI KK,3;["
  853.    Data "IF P1 VA 1=; [BU P1,P2,P3,SX P2-P2-,10,0,0,1;[LI 0,0,20BP3*+,SX;PR ZN78+MECXBP+,1,ZN78+ME,7;][BR0;BQ;] ]"
  854.    Data "]"
  855.    
  856.    Data ""
  857.    
  858.    
  859.    ' QUICK RUN DIALOG BOXES 
  860.    ALT: Data " "
  861.    ' One button, CANCEL 
  862.    Data "SIze   1VA TW 160+ SW MIn,72;"
  863.    Data "BAse   SWidth SX -2/,SHeight SY- 2/;"
  864.    Data "SAve   1;"
  865.    Data "BOx    0,0,1,SX,SY;"
  866.    Data "LIne 0,4,10,SX;"
  867.    Data "POut 77MECX,YB1+,77ME,0,7;"
  868.    Data "LIne 0,YB1+,10,SX;"
  869.    Data "POut   1VACX,YB8+,1VA,2,3;"
  870.    Data "IF     0VA 1=;"
  871.    Data "["
  872.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 6MECXBP+,1,6ME,7;][BR0;BQ;]"
  873.    Data "KY 27,0;"
  874.    Data "RUn    0,3;"
  875.    Data "]"
  876.    Data "IF     0VA 2=;"
  877.    Data "["
  878.    Data "BU 1,16,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 69MECXBP+,1,69ME,7;][BR0;BQ;]"
  879.    Data "KY 13,0;"
  880.    Data "BU 2,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 78MECXBP+,1,78ME,7;][BR0;BQ;]"
  881.    Data "KY 27,0;"
  882.    Data "RUn    0,3;"
  883.    Data "]"
  884.    Data "IF     0VA 3=;"
  885.    Data "["
  886.    Data "BU 1,SX112-,SY16-,96,16,0,0,1;[LI 0,0,20BP3*+,SX;PR 78MECXBP+,1,78ME,7;][BR0;BQ;]"
  887.    Data "KY 27,0;"
  888.    Data "]"
  889.    Data "EXit;"
  890.    
  891.    Data "UI PP,2;"
  892.    Data "[PR P1MECX,P2,P1ME,3;]"
  893.    Data ""
  894.    
  895. End Proc
  896.  
  897. Procedure _STRING_CLEAN[A$,L]
  898.    A$=Left$(A$,L)
  899.    If Len(A$)
  900.       For C=Len(A$) To 1 Step -1
  901.          Exit If Right$(A$,1)<>" "
  902.          A$=Left$(A$,Len(A$)-1)
  903.       Next 
  904.    End If 
  905. End Proc[A$]
  906. Procedure _FIND_DISC[D$,N$]
  907.    N$=Upper$(N$) : L=Len(N$)
  908.    On Error Goto _NO
  909.    For T=0 To 4 : Multi Wait : Next 
  910.    A$=Upper$(Disc Info$(D$))
  911.    If Left$(A$,L)=N$ Then F=-1
  912.    Goto _QUIT
  913.    '
  914.    _NO: F=0 : Resume _QUIT
  915.    _QUIT:
  916. End Proc[F]
  917. Procedure _BELL
  918.    Bell 
  919. End Proc
  920. Procedure _QUIT
  921.    Dialog Close 
  922.    Fade 1 : Wait 16
  923.    _SCREEN_CLOSALL
  924.    Erase All 
  925.    If Prg State>0 : Edit : End If 
  926.    System 
  927. End Proc
  928. Procedure _ABORTED
  929.    
  930.    R=Dialog Run(1,8)
  931.    _QUIT
  932.    
  933. End Proc
  934. Procedure _GET_DISC[ND$,N$]
  935.    
  936.    Dialog Freeze 1
  937.    F=0 : QUIT=0
  938.    
  939.    Do 
  940.       
  941.       For D=0 To 2
  942.          D$="Df"+Chr$(48+D)+":"
  943.          If Exist(D$)
  944.             Trap Dir$=D$
  945.             If Errtrap=0
  946.                Exit If Dir$=ND$,2
  947.             End If 
  948.          End If 
  949.       Next 
  950.       
  951.       If F=0
  952.          Inc F
  953.          Dialog Open 2,AL$
  954.          Vdialog(2,0)=3
  955.          Vdialog$(2,1)=Resource$(52)+" "+N$+" "+Resource$(53)
  956.          R=Dialog Run(2)
  957.       Else 
  958.          QUIT=Dialog(2) : Exit If QUIT
  959.       End If 
  960.       
  961.       For T=0 To 25 : Multi Wait : Next 
  962.       
  963.    Loop 
  964.    
  965.    If F : Dialog Close 2 : End If 
  966.    Dialog Unfreeze 1
  967.    DRV$=D$ : DRV=D
  968.    
  969.    If QUIT : _ABORTED : End If 
  970.    
  971. End Proc[DSK$]
  972. Procedure _CHECK_INSTALLATION
  973.    
  974.    REG$="" : USER$=""
  975.  
  976.    ' Ask for user name if not defined 
  977.    Do 
  978.       
  979.       _GET_DISC[ND$(0),Resource$(91)]
  980.       
  981.       ' Look for user's name in AMOSPro
  982.       L=10*1024
  983.       Trap Open In 1,DRV$+"AMOSPro" : Exit If Errtrap
  984.       Trap Sload 1 To Start(BCOPY),L : Exit If Errtrap
  985.       Close 
  986.       
  987.       A$="dos.library"+Chr$(0)
  988.       ADCODE=Hunt(Start(BCOPY) To Start(BCOPY)+L,"dos.library")
  989.       If ADCODE=0 : Pop Proc[-1] : End If 
  990.       Add ADCODE,Len(A$)
  991.       
  992.       If Deek(ADCODE)
  993.          
  994.          L=Deek(ADCODE) : A$=Peek$(ADCODE+2,L)
  995.          L=Deek(ADCODE+16) : B$=Peek$(ADCODE+18,L)
  996.          For C=1 To Len(A$) : REG$=REG$+Chr$(Asc(Mid$(A$,C,1)) xor $73) : Next 
  997.          For C=1 To Len(B$) : USER$=USER$+Chr$(Asc(Mid$(B$,C,1)) xor $5A) : Next 
  998.          Exit 
  999.          
  1000.       Else 
  1001.          
  1002.          _GET_REG : If Param=0 : Exit : End If 
  1003.          
  1004.       End If 
  1005.       
  1006.       ' Message d'erreur 
  1007.       _BELL : R=Dialog Run(1,2)
  1008.       If R=2 : _QUIT : End If 
  1009.       
  1010.    Loop 
  1011.    
  1012.    
  1013.    ' Demande le nom 
  1014.    If USER$=""
  1015.       
  1016.       Do 
  1017.          R=Dialog Run(1,1)
  1018.          A$=Rdialog$(1,4) : _STRING_CLEAN[A$,32] : NAMEF$=Param$
  1019.          B$=Rdialog$(1,5) : _STRING_CLEAN[B$,32] : NAMES$=Param$
  1020.          
  1021.          If(Len(NAMEF$)<2) or(Len(NAMES$)<2)
  1022.             
  1023.             _BELL : A=Dialog Box(AL$,1,Resource$(105))
  1024.             
  1025.          Else 
  1026.             
  1027.             Exit 
  1028.             
  1029.          End If 
  1030.       Loop 
  1031.       
  1032.       
  1033.       ' Create Boot-up user's name + Reg number
  1034.       USER$=NAMEF$+" "+NAMES$
  1035.       If Len(USER$)>32
  1036.          USER$=Upper$(Left$(NAMEF$,1))+". "+NAMES$
  1037.          If Len(USER$)>32
  1038.             USER$=Left$(USER$,3)+Left$(NAMES$,28)
  1039.          End If 
  1040.       End If 
  1041.       A$=Upper$(Left$(NAMES$,3)) : A$=A$+String$("-",3-Len(A$))
  1042.       REG$=A$+REG$
  1043.       
  1044.       ' Calculate the codes to poke in AMOSPro 
  1045.       CODE0$=Chr$(0)+Chr$(Len(REG$))
  1046.       For L=1 To Len(REG$)
  1047.          CODE0$=CODE0$+Chr$((Asc(Mid$(REG$,L,1)) xor $73))
  1048.       Next 
  1049.       CODE1$=Chr$(0)+Chr$(Len(USER$)) : CODE2$=CODE1$
  1050.       For L=1 To Len(USER$)
  1051.          CODE1$=CODE1$+Chr$((Asc(Mid$(USER$,L,1)) xor $A5))
  1052.          CODE2$=CODE2$+Chr$((Asc(Mid$(USER$,L,1)) xor $5A))
  1053.          CHK=CHK+Asc(Mid$(USER$,L,1)) and $FF
  1054.       Next 
  1055.       
  1056.       ' Poke in AMOSPro
  1057.       Do 
  1058.  
  1059.          R=Dialog Run(1,10)
  1060.          _GET_DISC[ND$(0),Resource$(91)]
  1061.          
  1062.          Do 
  1063.             
  1064.             ' Noms / Registration dans AMOSPro 
  1065.             Trap Open In 1,DRV$+"AMOSPro" : If Errtrap : E=2 : Exit : End If 
  1066.             Trap A$=Input$(1,1024*4) : If Errtrap : E=2 : Exit : End If 
  1067.             Close 
  1068.  
  1069.             B$="dos.library"+Chr$(0) : P=Instr(A$,B$)-1 : If P<0 : E=4 : Exit : End If 
  1070.             PP=P+Leek(Varptr(A$)+P-4) : P=P+Len(B$)
  1071.             A$=""
  1072.  
  1073.             Trap Append 1,DRV$+"AMOSPro" : If Errtrap : E=1 : Exit : End If 
  1074.             
  1075.             Trap Pof(1)=P : If Errtrap : E=4 : Exit : End If 
  1076. 'RV
  1077.            Trap Print #1,CODE0$; : If Errtrap : E=1 : Exit : End If 
  1078.             
  1079.             Trap Pof(1)=P+16 : If Errtrap : E=2 : Exit : End If 
  1080.             Trap Print #1,CODE1$; : If Errtrap : E=3 : Exit : End If 
  1081.             
  1082.             Trap Pof(1)=PP : If Errtrap : E=2 : Exit : End If 
  1083.             Trap Print #1,CODE2$; : If Errtrap : E=3 : Exit : End If 
  1084.             
  1085.             Close 1
  1086.             Wait 100
  1087.             
  1088.             ' Termine! 
  1089.             Exit 2
  1090.             
  1091.          Loop 
  1092.          
  1093.          ' Gestion des erreurs  
  1094.          Close : _BELL
  1095.          R=Dialog Box(AL$,2,Resource$(96+E))
  1096.          If R=2
  1097.             R=Dialog Run(1,2)
  1098.             If R=2 : _QUIT : End If 
  1099.          End If 
  1100.          
  1101.       Loop 
  1102.       
  1103.    End If 
  1104.    
  1105. End Proc
  1106.  
  1107. Procedure _GET_REG
  1108.  
  1109.    Wait 50
  1110.    _TRACK_OPEN[0,DRV]
  1111.    TRSIZE=Areg(0)
  1112.    Erase 13 : Reserve As Chip Work 13,TRSIZE
  1113.    Erase 14 : Reserve As Chip Work 14,TRSIZE
  1114.    '  _TRACK_BUSY[DRV,-1] 
  1115.    _TRACK_MOTOR[0,1]
  1116.    _TRACK_READ[0,0,Start(13)] : E1=Param
  1117.    _TRACK_READ[0,80,Start(14)] : E2=Param
  1118.    _TRACK_MOTOR[0,0]
  1119.    '  _TRACK_BUSY[DRV,0]  
  1120.    _TRACK_CLOSE[0]
  1121.    Wait 50
  1122.  
  1123.    If E1+E2 : Pop Proc[-1] : End If 
  1124.    
  1125.    AN=Start(14)+108*4 : L=Peek(AN)
  1126.    For C=1 To 12
  1127.       CC=Peek(AN+L+C) : Exit If CC=0
  1128.       A$=A$+Chr$(CC)
  1129.    Next 
  1130.    NUMBER=Val(A$) : If NUMBER<10000 Then Goto _ERR
  1131.    N=Leek(Start(13)+$180) : If N<>NUMBER Then Goto _ERR
  1132.    FLAG=0 : Goto _END
  1133.    
  1134.    _ERR: FLAG=-1 : Goto _END
  1135.    _END: Erase 13 : Erase 14
  1136.    REG$=Str$(NUMBER)-" "
  1137.    
  1138. End Proc[FLAG]
  1139. Procedure _TRACK_OPEN[S,D]
  1140.    Dreg(0)=0 : Dreg(1)=S : Dreg(2)=D : Call DBANK
  1141. End Proc[Dreg(0)]
  1142. Procedure _TRACK_MOTOR[S,D]
  1143.    Dreg(0)=2 : Dreg(1)=S : Dreg(2)=D : Call DBANK
  1144. End Proc[Dreg(0)]
  1145. Procedure _TRACK_READ[S,T,A]
  1146.    Dreg(0)=4 : Dreg(1)=S : Dreg(2)=T : Areg(1)=A : Call DBANK
  1147. End Proc[Dreg(0)]
  1148. Procedure _TRACK_WRITE[S,T,A]
  1149.    Dreg(0)=5 : Dreg(1)=S : Dreg(2)=T : Areg(1)=A : Call DBANK
  1150. End Proc[Dreg(0)]
  1151. Procedure _TRACK_CLOSE[S]
  1152.    Dreg(0)=1 : Dreg(1)=S : Call DBANK
  1153. End Proc
  1154. Procedure _TRACK_CRUNCH[N,S,D]
  1155.    Dreg(0)=6 : Dreg(1)=N : Areg(1)=S : Areg(2)=D : Call DBANK
  1156. End Proc
  1157. Procedure _TRACK_UNCRUNCH[N,D]
  1158.    Dreg(0)=7 : Dreg(1)=N : Areg(1)=D : Call DBANK
  1159. End Proc
  1160. Procedure _TRACK_ERASE
  1161.    Dreg(0)=8 : Call DBANK
  1162. End Proc
  1163. Procedure _TRACK_BUSY[T,F]
  1164.    Dreg(0)=10
  1165.    Dreg(1)=F : A$="Df"+Mid$(Str$(T),2,1)+":"+Chr$(0) : Areg(1)=Varptr(A$)
  1166.    Call DBANK
  1167. End Proc[Dreg(0)]
  1168. Procedure _CHECK_SUM[A]
  1169.    Dreg(0)=3 : Areg(1)=A : Call DBANK
  1170. End Proc
  1171. Procedure _CHECK_SUM0[A]
  1172.    Dreg(0)=12 : Areg(1)=A : Call DBANK
  1173. End Proc
  1174. Procedure _VERIFY[A,B,S]
  1175.    Dreg(0)=9 : Areg(1)=A : Areg(2)=B : Dreg(1)=S : Call DBANK
  1176. End Proc
  1177. Procedure _WRITE_PROTECTED[S]
  1178.    Dreg(0)=11 : Dreg(1)=S : Call DBANK
  1179. End Proc[Dreg(0)]
  1180.  
  1181. Procedure _EXPLOSION
  1182.    
  1183.    Dim _OFFSETS(13,1)
  1184.    
  1185.    On Error Goto _MEM
  1186.  
  1187.    Clear Key : Erase All 
  1188.    Load "AMOSPro_System:Install_Data/Explosion.Abs"
  1189.    
  1190.    PBOB_INIT[9,16,200,200] : If Param : Error 32 : End If 
  1191.    For B=1 To 49
  1192.       PBOB[B,B] : If Param : Error 32 : End If 
  1193.    Next 
  1194.    PBOB_END
  1195.    
  1196.    
  1197.    For LOP=1 To 6
  1198.       Unpack 9+LOP To LOP
  1199.       Screen Hide LOP
  1200.    Next LOP
  1201.    Screen 6
  1202.    Palette $0,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  1203.    
  1204.    For LOP=0 To 13
  1205.       Read _OFFSETS(LOP,0)
  1206.       Read _OFFSETS(LOP,1)
  1207.    Next LOP
  1208.    
  1209.    SCR_OPEN[0,1,320,200,16,Lowres]
  1210.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1211.    
  1212.    Amos To Front 
  1213.    
  1214.    Plot 219,144,1
  1215.    Plot 219+1,144,1
  1216.    Plot 219-1,144,1
  1217.    Plot 219,144+1,1
  1218.    Plot 219,144-1,1
  1219.    '   Get Palette 1
  1220.    Flash 1,"(000,40)(112,5)(224,5)(446,5)(668,5)(88A,5)(AAC,5)(CCE,5)(FFF,12)(CCE,5)(AAC,5)(88A,5)(668,5)(446,5)(224,5)(112,5)"
  1221.    Double Buffer 
  1222.    Wait 130
  1223.    Repeat 
  1224.    Until Colour(1)=$FFF
  1225.    Flash Off 
  1226.    If Inkey$=Chr$(27) : Error 32 : End If 
  1227.  
  1228.    FRED:
  1229.    Get Palette 1
  1230.    
  1231.    For LOP=1 To 14
  1232.       Paste Bob 219-_OFFSETS(LOP-1,0),144-_OFFSETS(LOP-1,1),LOP
  1233.       Get Bob LOP,0,0 To 16,1
  1234.       Wait Vbl 
  1235.    Next LOP
  1236.    
  1237.    For LOP=1 To 6
  1238.       Screen To Front LOP
  1239.       Screen Show LOP
  1240.       Wait 2
  1241.    Next LOP
  1242.    
  1243.    Wait 100
  1244.    
  1245.    Screen 6
  1246.    Fade 4,$0,$FFE,$EEC,$EEA,$FDA,$EA4,$C74,$B53,$444,$555,$777,$888,$AAA,$BBB,$CCC,$EEE,$DFF,$BEE,$ADD,$9CD,$7BC,$6AB,$58A,$479,$369,$359,$259,$249,$139,$128,$17,$6
  1247.    For LOP=0 To 5 : Screen Close LOP : Next LOP
  1248.    Wait 40
  1249.    
  1250.    Double Buffer 
  1251.    
  1252.    For LOP=15 To 29
  1253.       Bob 1,207,143,LOP
  1254.       Wait 4
  1255.    Next LOP
  1256.    Bob Off 1
  1257.    Wait Vbl 
  1258.    Bob Off 
  1259.    Wait Vbl 
  1260.  
  1261.    Bob 1,170,147,30
  1262.    Channel 1 To Bob 1
  1263.    A$="Let A=30 ; P ; Move -30,5,10 ; P ; Let A=31 ; Move -30,5,10"
  1264.    A$=A$+" Let A=32 ; Move -60,10,10 ; Let A=33 ; Move -100,10,10 "
  1265.    Amal 1,A$
  1266.    Wait Vbl 
  1267.    Sam Play 6,1
  1268.    Amal On 1
  1269.    Wait 15
  1270.    
  1271.    Bob 5,206,124,42
  1272.    Channel 5 To Bob 5
  1273.    B$=" Let A=46 ; Move 10,-25,10 ; Let A=47 ; Move 20,-40,10 ; Let A=48 ; Move 30,-50,10 ; Let A=49 ; Move 30,-60,10"
  1274.    Amal 5,B$
  1275.    Wait Vbl 
  1276.    Sam Play 9,1
  1277.    Amal On 5
  1278.    Wait 15
  1279.    
  1280.    Bob 2,187,154,34
  1281.    Channel 2 To Bob 2
  1282.    C$="Let A=34 ; Move -10,10,10 ; Let A=35 ; Move -20,25,10 ; Let A=36 ; Move -30,30,10 ; Let A=37 ; Move -30,20,10"
  1283.    Amal 2,C$
  1284.    Wait Vbl 
  1285.    Sam Play 6,1
  1286.    Amal On 2
  1287.    Wait 15
  1288.    
  1289.    Bob 3,187,129,38
  1290.    Channel 3 To Bob 3
  1291.    D$="Let A=38 ; Move -30,-20,10 ; Let A=39 ; Move -60,-40,10 ; Let A=40 ; Move -80,-50,10 ; Let A=41 ; Move -100,-70,10"
  1292.    Amal 3,D$
  1293.    Wait Vbl 
  1294.    Sam Play 15,1
  1295.    Amal On 3
  1296.    Wait 15
  1297.    
  1298.    Bob 4,206,124,42
  1299.    Channel 4 To Bob 4
  1300.    E$="Let A=42 ; Move -15,-20,10 ; Let A=43 ; Move -20,-40,10 ; Let A=44 ; Move -25,-60,10 ; Let A=45 ; Move -30,-80,10"
  1301.    Amal 4,E$
  1302.    Sam Play 15,1
  1303.    Wait Vbl 
  1304.    Amal On 4
  1305.    
  1306.    Wait 100
  1307.    
  1308.    Bob 4,206,124,42
  1309.    Channel 4 To Bob 4
  1310.    Amal 4," Anim 1,(42,3)(43,3)(44,3)(45,3) ; Move -46,-64,20 ; "
  1311.    Wait Vbl 
  1312.    Amal On 4
  1313.    
  1314.    Bob 3,187,129,38
  1315.    Channel 3 To Bob 3
  1316.    Amal 3," Anim 1,(38,3)(39,3)(40,3)(41,3) ; Move -67,-39,20 ; "
  1317.    Wait Vbl 
  1318.    Amal On 3
  1319.    
  1320.    Bob 5,206,124,46
  1321.    Channel 5 To Bob 5
  1322.    Amal 5," Anim 1,(46,5)(47,5)(48,5)(49,5) ; Move 52,-120,20 ; "
  1323.    Wait Vbl 
  1324.    Amal On 5
  1325.    
  1326.    Bob 1,170,147,30
  1327.    Channel 1 To Bob 1
  1328.    Amal 1,"Anim 1,(30,5)(31,5)(32,5)(33,5); Move -70,18,20 ; "
  1329.    Wait Vbl 
  1330.    Amal On 1
  1331.    
  1332.    Wait 100
  1333.    For LOP=1 To 5
  1334.       Update 
  1335.       Wait Vbl 
  1336.       Put Bob LOP
  1337.       Wait Vbl 
  1338.       Bob Off LOP
  1339.    Next LOP
  1340.    
  1341.    Erase All 
  1342.    Pop Proc[0]
  1343.    
  1344.    _OFFSETS:
  1345.    Data 1,1
  1346.    Data 3,3
  1347.    Data 5,5
  1348.    Data 9,8
  1349.    Data 10,10
  1350.    Data 11,11
  1351.    Data 19,19
  1352.    Data 26,28
  1353.    Data 35,38
  1354.    Data 43,46
  1355.    Data 53,57
  1356.    Data 65,71
  1357.    Data 76,76
  1358.    Data 92,95
  1359.    
  1360.    _MEM: Erase All : _SCREEN_CLOSALL : Amos To Front : Resume _ERR
  1361.    _ERR:
  1362. End Proc[1]
  1363. Procedure SCR_OPEN[SCR,AUTO,X,Y,NUM,RES]
  1364.    Screen Open SCR,X,Y,NUM,RES
  1365.    Autoback AUTO
  1366.    Flash Off 
  1367.    Curs Off 
  1368.    Hide On 
  1369.    Cls 0
  1370. End Proc
  1371. Procedure PBOB_INIT[BANK,NCOL,MX,MY]
  1372.    Shared PB_BANK
  1373.    PB_BANK=BANK
  1374.    Trap Screen Open 7,MX,MY,NCOL,0 : If Errtrap : Pop Proc[1] : End If 
  1375.    Screen Hide 
  1376. End Proc[0]
  1377. Procedure PBOB[N,D]
  1378.    Shared PB_BANK
  1379.    Dec N
  1380.    A=Start(PB_BANK)+N*10
  1381.    If Deek(A)
  1382.       AB=Start(PB_BANK)+Deek(A)*2
  1383.       SX=Deek(A+2)*16 : SY=Deek(A+4)
  1384.       S=Screen : Screen 7
  1385.       Unpack AB,0,0
  1386.       Trap Get Bob D,0,0 To SX,SY : If Errtrap : Pop Proc[1] : End If 
  1387.       Screen S
  1388.       AA=Sprite Base(D) : Loke AA+6,Leek(A+6)
  1389.    End If 
  1390. End Proc[0]
  1391. Procedure PBOB_END
  1392.    Screen Close 7
  1393. End Proc
  1394. Procedure FAD_ALL[W]
  1395.    For T=1 To W
  1396.       Colour Back(Colour(0))
  1397.       View 
  1398.       Wait Vbl 
  1399.    Next 
  1400. End Proc
  1401.  
  1402. Procedure _SCREEN_CLOSALL
  1403.    For S=0 To 7
  1404.       Trap Screen Close S
  1405.    Next 
  1406. End Proc
  1407. Procedure _PANIC[E]
  1408.    Amos To Front 
  1409.    For S=0 To 7
  1410.       Trap Screen Close S
  1411.    Next 
  1412.    Erase All 
  1413.    Screen Open 0,640,24,2,Hires : Palette 0,0
  1414.    Curs Off : Pen 1
  1415.    If E=0
  1416.       Centre ">>> Not enough memory to proceed <<<"
  1417.    Else 
  1418.       Centre ">>> Cannot load configuration files. Please check your drive <<<"
  1419.    End If 
  1420.    Centre At(,2)+"Press any key to abort."
  1421.    Fade 3,0,$FFF
  1422.    Clear Key 
  1423.    Wait Key 
  1424.    System 
  1425. End Proc